<?php

namespace helper;


class Arr
{

  /**
   * 重置数组索引，兼容多维数组
   * @param $array
   * @return array
   */
  static public function resetKeys($array)
  {
    if (!is_array($array)) return $array;
    $keys = implode('', array_keys($array));
    if (is_numeric($keys)) $array = array_values($array);
    $array = array_map(array(__CLASS__, "resetKeys"), $array);
    return $array;
  }

  /**
   * 按指定字段分组
   * @param $arr
   * @param $key
   * @return array
   */
  static public function group($arr, $key)
  {
    $itemList = [];
    foreach ($arr as $v) {
      $itemList[$v[$key]][] = $v;
    }
    return $itemList;
  }

  /**
   * 多维数组排序
   * @param array $arrays 需要操作的数组
   * @param string $sort_key 排序键名
   * @param int $sort_order 排序方式
   * @param int $sort_type 排序方式
   * @return array|bool 排序后的数组
   */
  static public function sort($arrays, $sort_key, $sort_order = SORT_ASC, $sort_type = SORT_NUMERIC)
  {
    if (is_array($arrays)) {
      foreach ($arrays as $array) {
        if (is_array($array)) {
          $key_arrays[] = $array[$sort_key];
        } else {
          return false;
        }
      }
    } else {
      return false;
    }
    array_multisort($key_arrays, $sort_order, $sort_type, $arrays);
    return $arrays;
  }


  /**
   * 二维数组指定字段最大或者最小
   * @param $arrays
   * @param $field
   * @param string $type
   * @return array
   */
  static public function most($arrays, $field, $type = 'max')
  {
    if (!isset($arrays[0])) return $arrays[$field];
    $result = $arrays[0][$field];
    foreach ($arrays as $key => $val) {
      if ($type == 'max') $result = max($result, $val[$field]);
      if ($type == 'min') $result = min($result, $val[$field]);
    }
    return $result;
  }


  /**
   * 补全数组
   * @param $arr //要补全数组
   * @param $fieldKey //数组键值
   * @param $fieldValue //数组对应值
   * @param $begin //开始
   * @param $end //结束
   * @return array
   */
  static public function completion($arr, $fieldKey, $fieldValue, $begin, $end)
  {
    $last  = $begin;
    $arr[] = [$fieldKey => $end, $fieldValue => 0]; //添加终点
    $res   = [];
    foreach ($arr as $v) {
      while ($last < $v[$fieldKey]) {
        $res[] = [$fieldKey => $last, $fieldValue => 0];
        $last  += 1;
      }
      $res[] = $v;
      $last  += 1;
    }
    return $res;
  }

}